package com.zhy.sping.listener;

import com.zhy.sping.config.RabbitMqConfig;
import com.zhy.sping.config.RedisKeyConfig;
import com.zhy.sping.dto.CourseDocumentDto;
import com.zhy.sping.dto.MqMsgDto;
import com.zhy.sping.es.dao.CourseDocumentDao;
import com.zhy.sping.es.entity.CourseDocument;
import com.zhy.sping.util.RedissionUtil;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
@RabbitListener(queues = RabbitMqConfig.MQ_QCOURSE_ES)
public class CourseSynecListeren {
   // private Logger logger= LoggerFactory.getLogger(CourseSyncEsListener.class);
    @Autowired
    private CourseDocumentDao documentDao;

    @RabbitHandler
    public void hander(MqMsgDto dto){
        //logger.info("开始处理消息："+dto.getId());
        //保证消息的唯一消费
        boolean r=true,isfirst=true;//消息是否可以处理

        //1.校验消息是否处理
        if (RedissionUtil.exists(RedisKeyConfig.KEY_SET_MQID)){
            isfirst=false;
            //校验当前消息id是否处理
            if (RedissionUtil.checkSet(RedisKeyConfig.KEY_SET_MQID,dto.getId().toString())){
               // logger.error("消息重复接收："+dto.getId());
                r=false;
            }
        }

        //判断进行消息处理
        if (r){
            //获取消息
            CourseDocumentDto documentDto = (CourseDocumentDto) dto.getData();
            //将数据存储es中
            if (documentDao.save(new CourseDocument(documentDto.getId(),documentDto.getTeaname(),documentDto.getName()))!=null){
                //存储成功 几录消息的唯一id
                RedissionUtil.addSet(RedisKeyConfig.KEY_SET_MQID,dto.getId().toString());

                if (isfirst){
                    //第一次需要设置有效期
                    RedissionUtil.expire(RedisKeyConfig.KEY_SET_MQID,RedisKeyConfig.KEY_SET_MQID_TIME);
                }
            }
        }



       // logger.info("消息处理结束："+dto.getId());

    }

}
